Embeding Models 开源模型现状
1. 排行榜
Massive Text Embedding Benchmark (MTEB) Leaderboard 海量文本嵌入基准(MTEB)排行榜。MTEB Chinese leaderboard (C-MTEB)海量文本嵌入基准中文排行榜。
2. 基准
MTEB: Massive Text Embedding Benchmark
文本嵌入通常在单一任务的一小组数据集上进行评估,而不涵盖它们可能应用于其他任务的情况。目前尚不清楚语义文本相似性(STS)的最新嵌入是否同样适用于聚类或重新排名等其他任务。这使得跟踪该领域的进展变得困难,因为各种模型不断被提出,却没有得到适当的评估。为了解决这个问题,我们引入了大规模文本嵌入基准(MTEB)。MTEB涵盖了8个嵌入任务,涉及58个数据集和112种语言。通过在MTEB上对33个模型进行基准测试,我们建立了迄今为止最全面的文本嵌入基准。我们发现没有特定的文本嵌入方法在所有任务中占主导地位。这表明该领域尚未就一种通用的文本嵌入方法达成共识,并将其扩展到足够大的规模,以在所有嵌入任务上提供最新的结果。
MTEB的8个任务:
- Bitext mining
- Classification
- Clustering
- Pair Classification
- Reranking
- Retrieval
- STS(semantic textual similarity)
- Summarization
MTEB软件是开源的,通过添加少于10行代码来评估任何嵌入模型。数据集和MTEB排行榜可在[Hugging Face Hub](https://huggingface.co/spaces/mteb/l eaderboard) 上找到。
Bitext mining: 输入是来自两个不同语言的两组句子。对于第一组中的每个句子,需要找到第二组中的最佳匹配。匹配通常是翻译。提供的模型用于嵌入每个句子,最接近的对是通过余弦相似度找到的。F1 作为双文本挖掘的主要指标。还计算了准确性、精度和召回率。
Classification: 提供模型embeding一个训练集和测试集。训练集embeding用于训练一个最大迭代次数为100的逻辑回归分类器,并在测试集上进行评分。主要指标是准确率,另外还提供了平均精度和f1值。
Clustering: 给定一组句子或段落,目标是将它们分组成有意义的簇。使用批处理大小为32和k等于不同标签数量的小批量k均值模型(Pedregosa等人,2011)对嵌入文本进行训练。该模型使用v-measure(Rosenberg和Hirschberg,2007)进行评分。V-measure不依赖于簇标签,因此标签的排列不会影响得分。
Pair Classification: 提供了一对文本输入,并需要分配标签。标签通常是表示重复或释义对的二进制变量。这两个文本被嵌入,并使用各种度量标准计算它们之间的距离(余弦相似度、点积、欧几里得距离、曼哈顿距离)。使用最佳二进制阈值准确度,计算平均精度、F1、精确度和召回率。基于余弦相似度的平均精度得分是主要指标。
Reranking: 输入是一个查询和一组相关和不相关的参考文本。目标是根据它们与查询的相关性对结果进行排名。该模型用于嵌入参考文本,然后使用余弦相似度与查询进行比较。对每个查询进行评分,并在所有查询中进行平均。指标是平均MRR@k和MAP,后者是主要指标。
Retrieval: 每个数据集由一个语料库、查询和每个查询到语料库中的相关文档的映射组成。目标是找到这些相关文档。提供的模型用于嵌入所有查询,并使用余弦相似度计算所有语料库文档和相似度分数。根据分数对每个查询的语料库文档进行排名后,计算 nDCG@k、MRR@k、MAP@k、precision@k 和 recall@k 的几个 k 值。nDCG@10 作为主要指标。MTEB 重用来自 BEIR 的数据集和评估(Thakur 等人,2021 年)。
Semantic Textual Similarity (STS): 给定一个句子对,目标是确定它们的相似性。标签是连续分数,数字更高,表明句子更相似。提供的模型用于嵌入句子,并使用各种距离度量计算它们的相似度。使用 Pearson 和 Spearman 相关性以基本事实相似性对距离进行基准测试。基于余弦相似度的 Spearman 相关性作为主要指标(Reimers 等人,2016 年)。
Summarization: 提供了一组人工编写和机器生成的摘要。目标是对机器摘要进行评分。首先使用提供的模型嵌入所有摘要。对于每个机器摘要嵌入,计算与所有人工摘要嵌入的距离。保留最接近的分数(例如最高的余弦相似度)并用作单个机器生成摘要的模型分数。计算与机器生成摘要的地面真实人工评估的皮尔逊和斯皮尔曼相关性。与STS一样,基于余弦相似度的斯皮尔曼相关性作为主要指标(Reimers等人,2016年)。
3. 模型
3.1 BGE M3-Embedding
BGE M3-Embedding 来自BAAI和中国科学技术大学,是BAAI开源的模型。论文提出了一种新的embedding模型,称为M3-Embedding,它在多语言性(Multi-Linguality)、多功能性(Multi-Functionality)和多粒度性(Multi-Granularity)方面表现出色。M3-Embedding支持超过100种工作语言,支持8192长度的输入文本,同时支持密集检索(Dense Retrieval)、多向量检索(Multi-Vector Retrieval)和稀疏检索(Sparse Retrieval),为现实世界中的信息检索(IR)应用提供了统一的模型基础,通过这几种检索方式的组合,取得了良好的混合召回效果
我们可以查看官方与openai模型的对比,整体来看,采用三种方式联合检索的BGE-M3(ALL) 在三项评测中全面领先,而 BGE-M3稠密检索在多语言、跨语言检索中具有明显优势。
3.1.1 embedding models 的局限
尽管文本嵌入很受欢迎,但现有方法在多功能性方面仍然有限:
- 大多数嵌入模型仅针对英语量身定制,为其他语言留下了很少可行的选择。
- 现有的嵌入模型通常针对单个检索功能进行训练。然而,典型的 IR 系统需要多种检索方法的综合工作流程。
- 由于训练成本过高,训练具有竞争力的长文档检索器具有挑战性,其中大多数嵌入模型只能支持短输入。
3.1.2 BGE M3-Embedding的特点
M3-Embedding,这对于它支持多种语言,多种检索功能和多种输入粒度。
- M3-Embedding 精通多语言,能够支持超过 100 种世界语言。通过学习不同语言的公共语义空间,使每种语言的多语言检索和不同语言之间的跨语言检索成为可能。
- 此外,它能够生成通用嵌入来支持不同的检索功能,而不仅仅是密集检索,而且稀疏检索和多向量检索。
- 学习M3-Embedding来处理不同的输入粒度,从句子和段落等短输入到多达8,192个输入标记的长文档。
3.1.3 技术细节总览
1. 提出 self-knowledge distillation framework,集成三种检索方式:
1. 密集检索 dense retrieval
2. 稀疏检索 lexical (sparse) retrieval
3. 多向量检索 multi-vector retrieval
2. 优化了批处理策略,以实现大批量和高训练吞吐量,这极大地有助于嵌入的歧义性。
3. 进行全面和高质量的数据管理。我们的数据集由三个来源组成:
- 从大量多语言语料库中提取无监督数据
- 密切相关的监督数据的集成
- 稀缺训练数据的合成。
三个数据源相互补充并应用于训练过程的不同阶段,为通用文本嵌入奠定了基础。
3.1.4 密集检索
输入查询
3.1.5 稀疏检索
输出embedding也可以使用 估计每个术语的重要性 来增强词汇检索。对于查询中的每个术语 (term)
3.1.6 多向量检索
作为密集检索的扩展,多向量方法利用整个输出嵌入来表示查询和段落:
3.1.7 前向检索
由于嵌入模型的多功能性,检索过程可以认为是一个混合过程中。首先,可以通过每种方法单独检索候选结果(多向量方法由于其沉重的成本而免除这一步)。然后,根据综合相关性分数对最终的检索结果进行重新排序:
3.1.8 Self-Knowledge Distillation
训练嵌入模型是将正样本与负样本区分开。对于每个检索方法,期望查询的正样本要比负样本获得更高的分数。因此,进行训练过程最小化NCE loss,其一般形式由以下损失函数表示:
在之前的研究中,embedding模型的训练质量可以从知识蒸馏中受益,它利用了另一个排名模型的细粒度软标签。在这种情况下,我们简单地使用集成分数 sinter 作为教师,其中每个检索方法的损失函数修改为:
最后,我们用
3.1.9 训练
整个训练过程是一个多阶段的工作流程,如下图。
我们使用预先训练的 XLM-RoBERTa 模型,通过 RetroMAE 方法作为基础文本编码器。首先,使用海量无监督数据对文本编码器进行预训练,其中只有密集检索以对比学习的基本形式进行训练。将自知识蒸馏应用于第二阶段,对嵌入模型进行微调以建立三个检索功能。在这个阶段使用了标记数据和未标记数据,其中按照 ANCE 方法 为每个查询引入硬负样本。
3.1.6 高效Batching
embedding模型需要从多样化和海量的多语言数据中学习,以完全捕捉不同语言的一般语义。它还需要尽可能保持batch size足够大(可以利用大量的批量负样本),以确保text embedding 的判别性。鉴于 GPU 内存和计算能力的限制,常见的通常做法是将输入数据截断为短序列,以实现高吞吐量的训练和大批量。然而,常见的做法不是 M3-Embedding 的可行选择,因为它需要从短序列和长序列数据中学习来有效地处理不同粒度的输入。在M3-Embedding中,我们通过优化批处理策略来提高训练效率,该策略可以实现高训练吞吐量和大批量。
具体做法是,训练数据通过按序列长度分组进行预处理。在生成小批量时,训练实例从同一组中采样。由于序列长度相似,它显着减少了序列填充(用红色标记),并有助于更有效地利用 GPU。此外,在采样时不同 GPU 的训练数据,随机种子总是固定的,这确保了负载平衡并最小化每个训练步骤中的等待时间。此外,在处理长序列训练数据时,小批量进一步划分为子批次,占用内存占用较少。我们使用 梯度检查点 迭代地对每个子批次进行编码,并收集所有生成的嵌入。这种方法可以显着提高批量大小。例如,在处理长度为 8192 的文本时,批量大小可以增加 20 倍以上。最后,广播来自不同gpu的embedding,允许每个设备在分布式环境中获得所有embedding,这显著扩大了batch内的负样本的规模。
3.2 GTE-Qwen2-7B-instruct
GTE,是一种使用多阶段对比学习训练的通用文本嵌入模型。
3.2.1 embedding models 的局限
-
人们一直在追求开发一个统一的模型,以解决自然语言的多种下游任务,这是由于自然语言的多样化格式、领域和下游应用。
-
在文本表示研究领域,先前的文本嵌入模型主要集中在特定任务上,它们的训练策略或模型专门针对单一任务,可能在其他情境中表现不佳。例如,SimCSE 文本表示模型,训练于对称文本对,在文本检索任务中表现受限。
-
一些专门设计用于密集检索任务的文本表示模型在句子文本相似性任务中并不表现出稳健的性能。最近,研究重点已经转向开发更全面的文本表示模型,通过无监督对比预训练利用大量未标记的网络数据,结合任务特定的数据、提示或指令,在微调过程中缓解任务冲突。
3.2.2 特点
- 使用对开源数据的对比学习来构建通用文本嵌入(GTE)模型
具体来说,我们首先收集了一个大规模的数据集,包括从各种数据源中提取的无监督文本对,用于对比预训练。我们的模型预训练表现很好,在0-shot文本检索任务方面超过了BM25和E5模型,并在MTEB基准测试中超过了许多监督模型。 - 为了进一步提高所学文本表示的质量,我们从多个来源获取带有人工标签的高质量文本对,以进行对比微调。
经过监督微调,我们基于 110M BERT 的模型已经优于OpenAI的当前商业嵌入API,并在MTEB基准中排名靠前。 - 我们的模型也是使用了代码数据进行训练。
我们在CodeSearchNet基准上评估其代码搜索功能,该基准包括六种编程语言。值得注意的是,即使没有对每个子集进行特定语言的微调,我们的模型也明显优于针对每种编程语言进行微调的类似大小的最先进的代码检索器。
3.2.3 模型架构
我们embedding模型的骨干是一个深度Transformer encoder,可以使用预训练的语言模型(如BERT)进行初始化。我们的模型遵循vanilla的双编码器架构,顶部使用语言模型产生的上下文化token表示的均值池化。
给定一个由n个tokens 组成的 text
然后我们在第一个维度上应用一个轻量级的平均池化来获得文本表示,
文本表示通过contrastive objective (对比目标) 学习,将语义相关的文本对与不相关的文本对区分开来。这种训练过程需要正负对,采用
为了获得能够应用于广泛场景的高质量文本embedding,我们从多种格式和领域编制了一个广泛的文本对数据集。然后,我们使用改进的对比损失方法以多阶段方式对该数据集进行训练。
3.2.4 数据
- Unsupervised Pre-training Data 无监督预训练
弱监督文本相关性数据在公开可用的网络资源中很容易获得,例如 QA 论坛上查询和答案之间的内在联系。这些数据可以在不需要手动注释的情况下广泛收集,从而有效地帮助训练文本表示模型。为了确保嵌入模型的通用性,我们探索了一系列用于文本对提取的资源,包括网页(例如 CommonCrawl、ClueWeb)、科学论文(例如 arXiv、SemanticScholar)、社区 QA 论坛(例如 StackExchange)、社交媒体(例如 Reddit)、知识库(例如 Wikipedia、DBPedia)和代码库(例如 StackOverflow、GitHub)。此外,我们利用某些数据集中的超链接的存在来促进文本对提取。下表是数据集的统计数据。
下表展示了来自不同来源的文本对格式的一些示例。
- Supervised Fine-tuning Data 监督微调数据
在监督微调阶段,我们使用相对较小的数据集,其中包含两段文本之间的相关性的人工注释,以及通过额外的检索器挖掘的可选硬负例,以形成文本三元组。为了处理对称任务(例如语义文本相似性)和非对称任务(例如段落检索),我们从各种任务和领域收集数据,包括网络搜索(例如MS MARCO)、开放域问答(例如NQ)、自然语言推理(例如SNLI)、事实验证(例如FEVER)、释义(例如Quora)。我们总共使用了约3M对进行微调。
3.2.3 训练
我们模型的训练过程包括两个阶段:
- 无监督预训练
- 监督微调
3.2.3.1 数据采样
在无监督预训练的初始阶段,数据源在训练实例的数量方面往往存在显着差异。为了解决这种不平衡,我们采用多项分布对不同数据源的数据批次进行采样,同时考虑它们各自的大小。假设整个预训练数据集
设置
3.2.3.2 Contrastive Loss优化
当使用对比目标时,人们通常会重复使用batch内文档作为负面候选项,以提高训练效率。本文通过扩大批内查询和文档的负样本来改进对比学习目标。考虑一批正文本对样本
partition function
其中前两个term用于对比查询和文档,其中最后两term是逆向对比。我们使用余弦相似度作为距离度量:
embedding模型的训练包括两个阶段。
第一阶段仅使用in-batch的无监督数据的进行对比预训练,使用大批量对于通过减少包含更多底片的训练和推理之间的差距并为底层学习目标提供更好的近似来提高模型性能至关重要。为了促进这一点,我们在预训练期间将最大序列长度限制为 128,跨所有GPU分配负例使用。流行的技术,如自动混合精度训练、fp16和deepspeedZeRO的阶段1和梯度检查点也被联合用于减少内存成本并扩大批处理大小至一万以上。我们预训练5w步,这大致对应于整个预训练数据的一个epoch。我们只调整了学习率以确保更大模型的收敛。我们采用AdamW优化器,具有线性学习率衰减和热身期是在训练的初始5%。我们对三种不同的模型尺寸进行实验:small、base和large。这些模型使用小型 MiniLM 模型和 BERT 模型的基础模型和大型模型进行初始化。
第二阶段使用监督数据和hard负样本进行对比微调。,由于hard负样本已经能够提供学习目标可靠的梯度估计,因此不需要使用大batch。因此,使用全局batch为128和使用16个训练组,其中一个是正例,其余的要么是hard负样本,要么是随机负样本。我们将最大序列长度增加到512,以更好地处理长度较长的文本。在微调期间,学习率减小了十倍。模型在收集的数据集上进行了1 epoch的微调。In-batch 文本也被纳入作为负样本候选,使用了3.2.3.2中的描述的增强对比损失。
3.2.4 评估
3.3 Conan
3.3.1 embedding models 的局限
尽管embedding模型取得了重大进展,但现有方法在负样本选择方面仍然存在不足。通常,embedding模型通过对比学习进行训练,负样本的质量对模型性能至关重要。先前的研究提出了各种硬负挖掘策略,在一定程度上提高了模型性能。然而,这些策略大多被用作预处理步骤,限制了模型在处理复杂和可变训练数据时的性能。
3.3.2 Conan-Embedding
本文提出了 Conan-Embedding 模型,最大限度地利用更多更高质量的负样本。具体来说,我们在训练期间迭代地挖掘hard nagative,允许模型动态适应不断变化的训练数据。此外,我们引入了一个跨 GPU 平衡损失来平衡跨多个任务间的负样本数量,提高训练效率和有效性。我们还发现来自大型语言模型 (LLM) 的提示响应对可以用作训练数据,进一步提高嵌入模型的性能。有了这些改进,我们的方法在中国大规模文本嵌入基准(CMTEB)排行榜上排名第一,展示了其出色的性能和广泛的应用前景。
Conan-Embedding采用多阶段训练方法,分为预训练和微调阶段。
在监督微调阶段,我们为不同的下游任务执行特定任务的微调。下图所示,我们将任务分为两类:检索和STS(语义文本相似性)。检索任务包括查询、正文本和负文本,经典损失函数为InfoNCE损失。STS任务涉及区分两个文本之间的相似性,经典损失函数为交叉熵损失。我们还采用CoSENT损失来优化STS任务,其公式如下:
hard negative 每100步进行动态设置:
4. 总结
MTEB Chinese leaderboard (C-MTEB) 可以作为对比embedding model 中文效果的benchmark。BGE M3-Embedding 是基于 一种BERT模型做的,参数量较小。GTE 有GTE-Qwen2-7B-instruct版本,训练数据比较丰富。